-
人脸动画:
-
三维人脸重建:从二维到三维
-
表情捕捉重建(传统:
-
多目相机直接拍
-
Marker标记(常见
-
深度传感器(Kinnet
-
RGB视频流
-
用模型来重建
-
3DMM:说白了就是给定一个高质量的三维的人脸数据库,然后训练出一个2D->3D的模型,之后输入一个2D人脸,就通过模型输出3D。其中有S和T两种向量
-
multi-linear models:多一个参数,将人脸数据SVD,分为三个参数
-
非线性:引入深度学习
-
图像变形:
-
直接变形:无非就是从S到D做一个插值就完事,很直接
-
基于特征的图像变形:先找到特征点,对特征进行插值
-
BN算法:说白了就是训练一个数据库,包含对应的关键向量,然后插值这些向量。且向量上的点在转换后,到两端点的比例还是保持不变,这是他的关键
-
形状混合:
-
顶点插值法:主要问题在于不自然,且极端情况下会带来错误结果
-
几何内在参数法:先算边和角,再计算定点位置
-
弹簧模型:
-
阴影
- 阴影是构建立体感的重要因素,且分为本影和半影;可以帮助认识接受者和遮挡物的几何形状
- 阴影可以分为附着阴影(背朝太阳)、投射阴影(脸朝太阳)、自阴影(自己产生);
- 硬阴影VS软阴影:所谓硬就是点光源产生的阴影结果,每个点只有在或者不在阴影中两个值;软则是由面光源产生
- 平面阴影:计算较简单,可以直接套矩阵计算
- 曲面阴影:可以通过阴影纹理:阴影纹理是一种生成曲面阴影的方法,通过从光源的视点绘制场景,并将深度值存储在一个纹理中。然后,这个纹理被用作投影纹理来判断一个点是否在阴影中。
-
阴影的绘制算法:
-
阴影域(准确,但是慢):非常简单但是又很聪明的方法:人眼不是接受光线,而是发出光线;然后计算从视点到一个像素点的射线经历了几次阴影域,进入+1,退出-1,最后判断是否大于0即可。PPT上的讲解不够仔细,可以通过这个链接进一步了解:
-
阴影图算法(不准确,但是很快):简单来讲是指先存好一张Map,里面包含了光源到物体表面的深度信息,然后判断某个点是否在阴影中,就对比该点到光源的距离是否大于 深度图中存的值。
-
纹理映射:
- 纹理的概念:用来表示物体表面细节的图像,增强真实感
- 纹理使用三步:采集+贴图+滤波
- 柏林噪音:使用不同频率和振幅的相干噪音函数来创建自然的图案,可以用来生成大理石、木头、云等纹理。
- 纹理合成:基于点/块的拓展
- 纹理滤波:主要还是精度不够,带来的摩尔纹、锯齿问题等等,需要滤波去除。主要方式包括:点采样,双线性插值、双三次插值、MipMap(预先处理好大小不同的纹理素材,用的时候选合适大小就行)、各向异性过滤(现在游戏很常见了)
- 光追的概念:由于计算机只能模拟光线,而不能百分百还原现实世界的光线路径,于是有光线追踪技术来模拟
- 光线投射算法:①从视点发射光线,找到交点;②计算离视点最近的交点;③根据光照模型赋值亮度。缺点 :不包含阴影、反射、折射的效果,光线只走一次
-
光线跟踪算法(脱胎于光线投射):
- 首先,计算光线与场景中物体最近的交点
- 在物体交点处计算反射、折射所产生的新的光线的方向
- 对新的光线继续追踪(递归过程)
- 光线与各种形状物体相交计算
- 使用的Trick:计算半透明物体阴影时,直接将光的颜色乘上遮挡物的透明因子,而忽略光的折射
-
网格变形的几种常见变形:
- 曲面变形(寻找变形不变的模型表示)
- 空间变形(寻找具有良好属性的空间映射)
-
模型表示:
- 拉普拉斯坐标,比起坐标系坐标,好处是捕捉了顶点相对于其他顶点的局部差异,很适合变形。优点:平移不变(内在属性决定);缺点:旋转、缩放就不能保持不变了,为了克服缺点,可以引入旋转矩阵等。
- 其他内容了解即可
-
网格的光滑:目的是为了去除噪点
-
拉普拉斯曲线光滑:每个点向左右邻居的均值靠拢。简单理解就是收缩,不断地互相靠拢,达到平滑的效果。至于PPT中的这句话:二阶导数的有限差分离散化 =一维拉普拉斯算子, 可以做如下解释:
-
拉普拉斯算子定义:若在传统欧式空间,则是一阶导数的散度,即对F在每个坐标轴上的二阶偏导的求和;若在曲面上,则是对曲面M的梯度的散度,是对F在M上沿着任意方向的二阶方向导数求平均
-
有限差分离散化:即对离散的点,用他们的值来近似代替二阶导数,拉普拉斯算子也坍缩到一维,变成取两边的点的值的均值。
-
网格的简化:目的是简化掉多余的网格,提高性能。主要有以下四种方式:
- 采样:很low的方法,不用
- 自适应细分:即找规律,找到一个可以递归细分的基底网格来近似
- 去除:常用,迭代地去除网格上的顶点或面片,并通过三角化填补孔洞
- 顶点合并:将多个顶点合并成一个顶点,用的边坍缩算法,将共边的顶点合并起来
-
网格的细分:与简化相反。通常有两种算法
- Loop细分:第一个细分方法,较简单,每个边加一个顶点,一个三角形就变成4个小三角了,进行n步,一个三角面就变成了4n个三角面。至于顶点升级、选取的公式,了解即可
- 根三细分:不同于Loop在边上创建新的顶点,他在三角形中间创建顶点即重心位置,一个三角变三个三角。注意步骤:①找重心;②收缩顶点;③公共边去掉,改为连接两个重心点
-
网格模型的简化:基本有三种算法
- 顶点删除,简单直接
- 边压缩,删一条边,用到这条边的三角全部消失
- 面片收缩:一个三角消失,带走相邻的三个三角
- 点云的概念:顾名思义,由许多包含信息的点构成的集合,受限于硬件水平,获取点云是很合理的从三维世界建模的数据结构
-
点云的处理:
- 注册,把两个不同位置的点云进行对齐。其中用到的算法为ICP(迭代最近点算法)。ICP的问题: 按照直觉,肯定是把误差函数定义为两点之间的距离的绝对值,但是会带来不均匀采样的问题;后演化为求解最小化点到切平面的距离
-
法向估计+去噪:采用了类似深度学习中KNN的思想,考试会考到手工计算,需要熟练掌握协方差矩阵的计算+特征值特征向量的计算
- 法向估计的基本思想是对每个点,找到其最近邻的点,然后用主成分分析(PCA)来计算协方差矩阵,最后求解该矩阵的最小特征值对应的特征向量,即为法向量。法向估计的关键参数是邻域大小,它决定了采样的精度和噪声的影响。
- 去噪:噪音估计的基本思想是利用PCA的结果来判断点云的变化性。如果点云在某个方向上变化很小,说明该方向是无可变性的,即法线方向;如果点云在所有方向上变化都很大,说明该点云是随机分布的,即噪声点。噪音估计的关键参数是邻域大小,它决定了噪声检测的灵敏度和准确度。
- 表面重建:包括隐式表面法、泊松表面重建(虽然笔者认为考试不大会考)